package com.love.usedcar.enums;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public enum WarrantyEnum {

    原厂质保("原厂质保", "由汽车生产厂家提供的官方质保服务"),
    第三方质保("第三方质保", "由独立于厂家和消费者的第三方机构提供的质保服务"),
    无质保("无质保", "未提供任何形式的质量保证服务");

    private final String code;
    private final String desc;

    WarrantyEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    /**
     * 根据代码获取枚举实例
     * @param code 质保代码
     * @return 对应的枚举实例，若未找到则返回null
     */
    public static WarrantyEnum getByCode(String code) {
        if (code == null || code.isEmpty()) {
            return null;
        }
        for (WarrantyEnum warrantyEnum : values()) {
            if (warrantyEnum.code.equalsIgnoreCase(code)) {
                return warrantyEnum;
            }
        }
        return null;
    }

    /**
     * 获取所有枚举实例列表
     * @return 包含所有枚举实例的列表
     */
    public static List<WarrantyEnum> getAll() {
        return Arrays.asList(values());
    }

    /**
     * 获取所有枚举的code列表
     * @return 包含所有code的列表
     */
    public static List<String> getAllCodes() {
        return Arrays.stream(values())
                .map(WarrantyEnum::getCode)
                .collect(Collectors.toList());
    }

    /**
     * 获取所有枚举的描述列表
     * @return 包含所有描述的列表
     */
    public static List<String> getAllDescs() {
        return Arrays.stream(values())
                .map(WarrantyEnum::getDesc)
                .collect(Collectors.toList());
    }

    /**
     * 根据code获取对应的描述
     * @param code 质保代码
     * @return 对应的描述，若未找到则返回null
     */
    public static String getDescByCode(String code) {
        WarrantyEnum warrantyEnum = getByCode(code);
        return warrantyEnum != null ? warrantyEnum.getDesc() : null;
    }

    /**
     * 判断code是否存在于枚举中
     * @param code 质保代码
     * @return 存在返回true，否则返回false
     */
    public static boolean containsCode(String code) {
        return getByCode(code) != null;
    }

    public String getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }
}
